package top.dingwen.io.treasure.api.upc;

import top.dingwen.io.treasure.api.base.constant.ApiConstant;

/**
 * 当前用户实现 </br>
 * <ul>
 *     <li>若使用着没有从新实现该接口则以默认实现为准,否则以使用者实现的接口为准</li>
 *     <li>此接口不应该多实现,默认+自定义即可</li>
 * </p>
 *
 * @author dingwen
 * @since 2023/3/19 15:24
 */
@SuppressWarnings(ApiConstant.ALL)
public interface ICurrentUserService {

    /**
     * 获取当前用户的租户编号
     * @return {@link Long } 租户编号
     */
    Long getTenantId();

    /**
     * 获取当前用户的账号
     * @return {@link String } 账号
     */
    String getAccount();

    /**
     * 获取当前用户的客户端编码
     * @return {@link String } 客户端编码
     */
    String getClientCode();

    /**
     * 获取当前用户的数据源名称
     * @return {@link String } 数据源名称
     */
    String getTenantDataSourceKey();

    /**
     * 获取当前登录态名称
     *
     * @return 名称
     */
    String getLoginName();


    /**
     * 获取当前登录编号
     *
     * @return 数据对象
     */
    <T> T getLoginId();

    /**
     * 获取当前登录用户
     *
     * @return 用户对象
     */
    <T> T getCurrentUser();


    /**
     * 获取当前用户的范围信息
     *
     * @return {@link ScopeContainerResponse } 范围信息
     */
    ScopeContainerResponse getCurrentScope();
}
